還記得第一次在高中用C#寫Hello word時就有看到static
namespace Hi
{
public class Program
{
static void Main(string[] args) //一開始初始化console專案就出現的static
{
Console.WriteLine("Hello word");
}
}
}
當時老師也沒多做解釋
就讓他一直存在程式碼中
直到大學修C語言相關的課程才知道他跟記憶體的關係
就代表說如果宣告一個成員是static
那麼這個成員就會固定占用那塊記憶體
如果你又宣告了和static同名的成員
那麼這兩個成員就會變成生命共同體
改一個就等於兩個都改
所以要特別小心
不過如果只是個小專案而且也只需要一些功能的話
那的確可以不用了解static也能開發
(就像即使資訊科畢業也不一定要會修電腦
但如果你真的很有興趣 或是擁有打破砂鍋了解到底的精神
那多學也沒什麼壞處)
而靜態方法static的好處就是不需要new便可以使用
但非靜態方法就需要靠new來實體化才能用
所以我就想說幹嘛不都用static就好
還可以用較少的程式碼完成相同的功能
問題就在於剛剛提到的因為static內的成員是存在同樣的記憶體內
(像是淺拷貝的概念 若修改複製出來的東西 原本被複製的也會改變)
還有容易造成memory leak
因為即使static完全不會被執行到
他還是占著茅坑不拉屎
讓記憶體的可用資源越來越少(除非你記憶體大到不需要管)
而且也很難做單元測試(因為需要一次只針對單一功能驗證 但static會互相影響[耦合])
所以老話一句:看你需要什麼,就找到最合適的方法來用
沒有一定怎麼樣比較好